home *** CD-ROM | disk | FTP | other *** search
/ The PC-SIG Library 10 / The PC-Sig Library - Shareware for the IBM PC and Compatibles (PC-SIG)(Tenth Edition Disks 1-2804)(1991).iso / PC_SIGCD / 10 / 9 / DISK1095.ZIP / CHARTMNT.PRG < prev    next >
Text File  |  1987-02-20  |  8KB  |  243 lines

  1. *
  2. * CHARTMNT
  3. * ACCOUNTING SYSTEM CHART OF ACCOUNT MAINTENANCE
  4. * FILE STRUCTURE MUST ALREADY EXIST
  5. SET HEADING OFF
  6. SET SAFETY OFF
  7. SET STATUS OFF
  8. CLEAR
  9. CLEAR ALL
  10. SET TALK OFF
  11. SET BELL OFF
  12. * DEFINE A STRING OF BLANKS
  13. STORE SPACE (80) TO BLANK
  14. * CLEAR REQUEST AND ACTION CONTROL VARIABLES
  15. STORE " " TO REQUEST
  16. STORE " " TO ACTION
  17. STORE "N" TO DATAIN
  18. STORE 0 TO RECCNT
  19. *
  20. *===============================START MODS: 1================================*
  21. * SET NAME OF FILE                                                           *
  22. STORE "ACCTCHRT" TO FILENAME
  23. * SETUP COUNT OF INDEXES FOR THE FILE filename
  24. STORE 1 TO IXCOUNT
  25. * SETUP CONSTANTS CONTAINING INDEXES IN SEQUENCE TO USE IN MACRO LATER.
  26. * LIST EACH INDEX FIRST AS A PRIMARY INDEX. VARIABLES NAMED IXA, IXB, IXC, ETC.
  27. STORE "ACCOUNT" TO IXA
  28. * DEFINE KEYS FOR INDEX. IF NUMERIC, MUST CONVERT WITH STR(). USE DI+IXA, ETC.
  29. STORE "ACCT_NUM" TO DIIXA
  30. *==================================END MODS==================================*
  31. *
  32. * SAVE NAME OF MACRO WHICH CONTAINS ACTIVE INDEX AS FIRST INDEX
  33. STORE "IXA" TO LIVE_IX
  34. * FIND RECORD COUNT
  35. USE &FILENAME
  36. COUNT TO RECCNT
  37. * IF DBF FILE IS EMPTY, 'IF STATEMENT' WILL PREVENT 'RECORD OUT OF RANGE'
  38. * ERROR FROM OCCURING WHEN <A>dd OPTION OF SUBMENU IS CHOSEN.
  39.  IF RECCNT = 1
  40.     RECCNT = RECCNT-1
  41.  ENDIF
  42. * IF FILE IS EMPTY, ASSUME INDEXES NOT CREATED AND CREATE THEM.
  43.   IF RECCNT = 0 .AND. IXCOUNT>0
  44.    STORE 1 TO COUNT
  45.    DO WHILE COUNT<=IXCOUNT
  46.       STORE "IX"+CHR(64+COUNT) TO TEMP
  47.       STORE "DI"+TEMP TO TEMP2
  48.       IF IXCOUNT>1
  49.          STORE SUBSTR(&TEMP,1,AT(",",&TEMP)-1) TO TEMP
  50.       ELSE
  51.          STORE &TEMP TO TEMP
  52.       ENDIF
  53. * NEXT STATEMENT NEEDED FOR AN EXTRA MACRO CONVERSION
  54.       STORE &TEMP2 TO TEMP2
  55.       INDEX ON &TEMP2 TO &TEMP
  56.       STORE COUNT+1 TO COUNT
  57.    ENDDO
  58.   ENDIF
  59. * ADD INDEXES
  60. SET INDEX TO &IXA
  61. GO TOP
  62. *
  63. * MAIN UPDATE LOOP. TERMINATED BY 'M' AS REQUEST
  64. DO WHILE REQUEST<>"M"
  65. *
  66. *===============================START MODS: 2================================*
  67. * DISPLAY SCREEN MASK: HEADING INFORMATION PLUS LABELS FOR EACH FIELD        *
  68.    @ 1,22 SAY "SMITH'S BIKEWORKS INFORMATION SYSTEM"
  69.    @ 3,11 SAY ">> Accounting System Chart of Accounts File Maintenance <<"
  70.    @ 5,17 SAY "Today's Date:"
  71.    ?? DATE()
  72. * SETUP VARIABLE PART OF MASK
  73.    CLEAR GETS
  74.    @ 7,1  SAY "Account Number " GET ACCT_NUM
  75.    @ 7,26  SAY "Description " GET ACCT_DESC
  76.    @ 7,66 SAY "Acct Type " GET ACCT_TYPE
  77.    @ 9,1  SAY "January   " GET MONTH1
  78.    @ 11,1  SAY "February  " GET MONTH2
  79.    @ 13,1  SAY "March     " GET MONTH3
  80.    @ 15,1  SAY "April     " GET MONTH4
  81.    @  9,28 SAY "May       " GET MONTH5
  82.    @ 11,28 SAY "June      " GET MONTH6
  83.    @ 13,28 SAY "July      " GET MONTH7
  84.    @ 15,28 SAY "August    " GET MONTH8
  85.    @  9,57 SAY "September " GET MONTH9
  86.    @ 11,57 SAY "October   " GET MONTH10
  87.    @ 13,57 SAY "November  " GET MONTH11
  88.    @ 15,57 SAY "December  " GET MONTH12
  89.    @ 17,26 SAY "Year to Date Total " GET ACCT_YTD
  90. * DATE OF LAST UPDATE SHOULD BE ONE OF THE FIELDS (LAST_UPDT)
  91.    @ 18,1 SAY "Last Updated : "
  92.    ?? LAST_UPDT
  93. *==================================END MODS==================================*
  94. *
  95. * DISPLAY VARIABLE DATA IN SCREEN HEADING
  96.    IF DELETE()
  97.       @ 5,1 SAY "* DELETED *"
  98.    ELSE
  99.       @ 5,1 SAY "           "
  100.    ENDIF
  101. * IDENTIFY RECORD
  102.    @ 5,62 SAY RECCNT
  103.    @ 5,50 SAY RECNO()
  104.    @ 5,43 SAY "Record"
  105.    @ 5,61 SAY "of"
  106. * IF DATAIN FLAG SET, ACTIVATE THE GETS
  107.    IF DATAIN="Y"
  108.       @ 19,72 GET ACTION
  109.       READ
  110. * DATE STAMP RECORD
  111.       REPLACE LAST_UPDT WITH DATE()
  112.       IF REQUEST="E".OR.ACTION<>"C"
  113.          STORE "N" TO DATAIN
  114.          STORE " " TO REQUEST
  115.          STORE " " TO ACTION
  116.       ENDIF 2
  117.    ELSE
  118.       CLEAR GETS
  119.    ENDIF 1
  120. *
  121. * DISPLAY CONTROL SUBMENU, CURRENT ACTIVE INDEX
  122.    @ 19,0 SAY BLANK
  123.    @ 20,0 SAY "----------------------------------------"
  124.    @ 20,40 SAY "----------------------------------------"
  125.    @ 21,0 CLEAR
  126.    @ 21,2 SAY ;
  127. "<F>ind Record  <A>dd Record   <D>elete/Recall  <E>dit Record   Current Active"
  128.    @ 22,2 SAY ;
  129. "<P>rev Record  <N>ext Record  <M>enu (return)  <K>ey Select    Key:          "
  130. * IF INDEX SET NAMED IN LIVE_IX HAS MULTIPLE ENTRIES, EXTRACT FIRST
  131.    IF (","$&LIVE_IX)
  132.       STORE SUBSTR(&LIVE_IX,1,AT(",",&LIVE_IX)-1) TO TEMP
  133.       @ 22,70 SAY TEMP
  134.    ELSE
  135.       @ 22,70 SAY &LIVE_IX
  136.    ENDIF
  137. * GET REQUEST AND FORCE TO UPPER CASE UNLESS ALREADY IN 'A' FOR ADD RECORDS
  138.    IF REQUEST<>"A"
  139.       STORE " " TO REQUEST
  140.       STORE " " TO ACTION
  141.       @ 23,10 SAY "          *** NEXT ACTION TO PERFORM " GET REQUEST
  142.       READ
  143.       STORE UPPER(REQUEST) TO REQUEST
  144.    ENDIF
  145. * CLEAR ADD RECORD COMMAND LINE, SUBMENU AREA
  146.    @ 21,0 CLEAR
  147.    DO CASE
  148. * ADD NEW CASE OR EDIT DISPLAYED CASE
  149.       CASE REQUEST="A".OR.REQUEST="E"
  150. * IN ADD MODE, APPEND A BLANK RECORD FOR THE DATA AND POSITION TO THAT RECORD
  151.          IF REQUEST="A"
  152.             @ 19,6 SAY "*** PRESS 'C' TO CONTINUE ADDING NEW RECS, ANYTHING ;
  153. ELSE TO QUIT"
  154.             APPEND BLANK
  155.             STORE RECCNT+1 TO RECCNT
  156.             GO RECCNT
  157.          ELSE
  158.             @ 19,6 SAY "******** PRESS ANY KEY TO FINISH EDIT AND RETURN TO ;
  159. SUBMENU     "
  160.          ENDIF
  161.          @ 21,10 SAY "Enter data at cursor position. Move among fields with"
  162.          @ 22,10 SAY "cursor control keys. Press ENTER to move to next field."
  163.          @ 23,10 SAY "Press ENTER alone to leave field unchanged."
  164. * SET FLAG TO CAUSE NEW DATA TO BE READ
  165.          STORE "Y" TO DATAIN
  166. * TOGGLE DELETE FLAG. * FUNCTION CHECKS IF RECORD NOW FLAGGED AS DELETED
  167.       CASE REQUEST="D"
  168.          IF DELETE()
  169.             RECALL
  170.          ELSE
  171.             DELETE
  172.          ENDIF
  173. * PREVIOUS RECORD IN ACTIVE INDEX SEQUENCE
  174.       CASE REQUEST="P"
  175.          SKIP -1
  176. * NEXT 3 LINES TO SECURE BACKWARD LOOP
  177.          IF BOF()
  178.             GO BOTTOM
  179.          ENDIF
  180. * NEXT RECORD IN ACTIVE INDEX SEQUENCE
  181.       CASE REQUEST="N"
  182.          SKIP +1
  183. * NEXT 3 LINES TO SECURE FOWARD LOOP
  184.          IF EOF()
  185.             GO TOP
  186.          ENDIF
  187. * GET SEARCH VALUE FOR INDEXED SEARCH
  188.       CASE REQUEST="F"
  189. * USE MACRO DEFINING INDEX ENTRIES FROM DATA FIELDS
  190.          STORE "DI"+LIVE_IX TO IXDEF
  191.          STORE &IXDEF TO SV
  192.          STORE &SV TO SV
  193.          @ 21,1 SAY ;
  194.          "ENTER SEARCH VALUE. VALUE SHOWN IS FROM THE DISPLAYED RECORD. PRESS"
  195.          @ 22,1 SAY "CTRL-Y TO CLEAR " GET SV
  196.          READ
  197. * REMOVE TRAILING BLANKS BEFORE SEARCH
  198. * IF RECORD IS NOT FOUND DISPLAY STAYS AT CURRENT RECORD
  199. * NEXT LINE TO KEEP TRACK OF CURRENT RECNO() FOR TEST BELOW
  200.          STORE RECNO() TO NOW
  201.          SEEK SV
  202. *        LOCATE FOR ACCT_NUM = SV
  203. * NEXT 3 LINES KEEP PRESENT RECORD DISPLAYED IF NO FIND.
  204.          IF EOF()
  205.             GOTO NOW
  206.          ENDIF
  207. * CHANGE INDEX
  208.       CASE REQUEST="K"
  209.          STORE RECNO() TO RECNOW
  210.          STORE " " TO IXCHOICE
  211. * SETUP MENU OF INDEX NAMES, PROVIDE IF CLAUSE FOR EACH INDEX                *
  212.          @ 21,9 SAY " "
  213.          STORE 1 TO COUNT
  214.          DO WHILE COUNT<=IXCOUNT
  215.             STORE "IX"+CHR(64+COUNT) TO TEMP
  216.             IF IXCOUNT>1
  217.                ?? CHR(64+COUNT)+". "+SUBSTR(&TEMP,1,AT(",",&TEMP)-1)+" "
  218.             ELSE
  219.                ?? CHR(64+COUNT)+". "+&TEMP
  220.             ENDIF
  221.             STORE COUNT+1 TO COUNT
  222.          ENDDO
  223.          @ 22,10 SAY "Press letter of desired key " GET IXCHOICE
  224.          READ
  225.          STORE UPPER(IXCHOICE) TO IXCHOICE
  226.          IF IXCHOICE>="A".AND.IXCHOICE<=CHR(64+IXCOUNT)
  227.             STORE "IX"+IXCHOICE TO LIVE_IX
  228.             STORE &LIVE_IX TO TEMP
  229.             SET INDEX TO &TEMP
  230.         ENDIF
  231. * GOTO THIS RECORD TO ACTIVATE INDEX
  232.          IF RECNOW>0
  233.             GO RECNOW
  234.          ELSE
  235.             GO BOTTOM
  236.          ENDIF
  237.    ENDCASE
  238. ENDDO
  239. * FALL OUT OF DO WHEN 'M' IS REQUEST, RETURN TO SUBSYSTEM'S MENU
  240. CLEAR
  241. RETURN
  242.  
  243.